MetaMask のネットワーク変更を検知する
MetaMask の仕様変更
MetaMask のネットワークを変更したときに、これまではブラウザを自動的にリロードしていたが、自動的にリロードしないようになるとのことです。
したがって、 ポーリングで MetaMask に設定されているネットワークを確認する必要が出てくるようになりました。
なお、どのネットワークが選択されているかについては、ローカルに値がキャッシュされているので、ポーリングしても通信は発生しないとのことです。
MetaMask のネットワーク変更を検知するプログラム例
この例では web3.js 0.20.6 を使用
code:example.js
var web3js; // ローカルの Web3 オブジェクトを格納するための変数です。
window.onload = function() {
if (typeof web3 !== 'undefined') {
// Mist または MetaMask のプロバイダを使用して Web3 を初期化します。
web3js = new Web3(web3.currentProvider);
console.log(web3js.version.api); // => 0.20.3
// ポーリングし、使用しているネットワークをチェックします。
setInterval(function () {
web3js.version.getNetwork(checkNetwork)
}, 1000);
function checkNetwork (err, currentNetwork) {
if (window.lastNetwork != currentNetwork) {
alert("Ethereum Network has been changed: " + currentNetwork);
window.lastNetwork = currentNetwork;
}
}
}
};
参考
関連